home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er 1991 September
/
64er_Magazin_91-09_1991_Markt__Technik_de_Side_A.d64
/
demo 2.src
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
3KB
|
62 lines
10 sys36864
20 .opt oo
30 *= $c000
40 ; dieses programm definiert zwei
50 ; neue basicbefehle
60 ; - beep erzeugt einen ton
70 ; - erase x loescht bildsch. zeile x
80 ; nikolaus heusler, muenchen, 3.91
100 ibas =776;vektor fuer basicbefehl
110 inter =$a7ae;interpreterschleife
120 oldbas =$a7e4;alten befehl ausfuehren
130 sid =54272;soundchip basisadresse
140 chrget =115;naechstes zeichen holen
150 illquan =$b248;illegal quantity error
160 getx =$b79e;holt byte-wert nach x
170 clrx =59903;loescht bildschirmzeile x
180 ok =$e18d;ok ausgeben
190 tmp =2;zwischenspeicher
200 ptr =122;zeiger auf basicbefehl
300 ; --- neue befehle definieren
310 lda #<neubef:ldy #>neubef;zeiger auf neue routine
320 sta ibas:sty ibas+1;vektor verbiegen
330 jmp ok;ok ausgeben
400 ; --- neue befehls-routine
410 neubef lda ptr:ldy ptr+1:sta tmp:sty tmp+1;basic-pointer retten:ldx #0
420 ; --- test, ob befehl nr. 1
430 test1 jsr chrget;naechstes zeichen holen:cmp text1,x;befehlswort pruefen
440 bne nein1;wenn nicht, dann befehl 2 pruefen
450 inx:cpx #4;laenge des befehlswortes:bne test1;nicht erreicht, weiter testen
460 jsr pieps;befehl ausfuehren
470 ; --- neuen befehl fertig ausgefuehrt
480 fertig jmp inter;weiter mit interpreterschleife
500 ; --- war nicht der erste befehl
510 nein1 lda tmp:ldy tmp+1:sta ptr:sty ptr+1;pointer zurueckholen:ldx #0
520 ; --- test, ob befehl nr. 2
530 test2 jsr chrget;naechstes zeichen holen:cmp text2,x;befehlswort pruefen
540 bne nein2;wenn nicht, dann fertig
550 inx:cpx #5;laenge des befehlswortes:bne test2;nicht erreicht, weiter testen
560 jsr loesch;befehl ausfuehren
570 jmp fertig;und weiter wie oben
600 ; --- war nicht der zweite befehl
610 nein2 lda tmp:ldy tmp+1:sta ptr:sty ptr+1;pointer zurueckholen
620 jmp oldbas;alten basic-befehl ausfuehren
700 ; --- routinen der neuen befehle
710 ; --- befehl 1 - ton ausgeben
720 pieps jsr chrget;naechstes zeichen:lda #0:ldx #24;sid-register loeschen
730 clrsid sta sid,x:dex:bpl clrsid;null in alle register schreiben
740 lda #15:sta sid+24;lautstaerke auf 15
750 lda #100:sta sid+1;tonhoehe:lda #240:sta sid+6;wellenform
760 lda #17:sta sid+4;ton ein
770 ldx #0:ldy #0;warteschleife
780 wait nop:dex:bne wait:dey:bne wait;wartet ca. 1/2 sekunde
790 lda #16:sta sid+4;ton aus:rts;fertig
800 ; befehl 2 - bildschirmzeile loeschen
810 loesch jsr chrget;naechstes zeichen:jsr getx;nummer der zeile holen
820 cpx #25;groesser als 24:bcc stimmt;kleiner, dann ok
830 jmp illquan;sonst fehlermeldung ausgeben
840 stimmt jsr clrx;bildschirmzeile nr. x loeschen:rts;fertig
900 ; --- befehls-texte
910 text1 .asc "beep";text im ascii-code
920 text2 .asc "erase";text im ascii-code